home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 January / CHIP Turkiye Ocak 1998.iso / ARACLAR / LOTUSORG / ACROREAD / INSTALL.DSK / INST.LSS < prev    next >
Text File  |  1996-05-17  |  52KB  |  1,277 lines

  1. ''/*********************************************************************
  2. ''
  3. ''   Module Name:   INST.lss
  4. ''
  5. ''   Module Code:   COMINST
  6. ''
  7. ''   Author:              
  8. ''
  9. ''   Creation Date:       Jan 26, 1994
  10. ''
  11. ''   Copyright Lotus Development Corporation, (c) 1994
  12. ''
  13. ''
  14. ''  
  15. ''   Description: 
  16. ''  
  17. ''
  18. ''   Additional authors:
  19. ''
  20. ''   Change History:
  21. ''   $Log:   //CIT/VOL1/CFLOG/logfiles/cominst/toolkit/inst___@.lss  $
  22. '' 
  23. ''    Rev 1.63   17 May 1996 10:09:58   jdonohue
  24. '' Added SYM_LOTUSUSERDIR to symbol list for install for cinstall.ini
  25. '' 
  26. ''    Rev 1.62   30 Apr 1996 09:58:48   jdonohue
  27. '' Ref SPR:    AGAO357QH7
  28. '' Changed logic in SetUserHomeDirectory so that LOTUSUSERDIR set to
  29. '' COMPONENTSDIR for standard and server, to local user directory for node, and
  30. '' to nothing for distribution
  31. '' 
  32. ''    Rev 1.61   29 Apr 1996 16:23:30   jdonohue
  33. '' Only refresh SYM_LOTUSUSERDIR Destination if symbol not empty string 
  34. '' 
  35. ''    Rev 1.60   22 Apr 1996 14:17:08   jdonohue
  36. '' Ref SPR:  RMOO345M3L
  37. '' Fixed error in setting value of LOTUSUSERDIR
  38. '' 
  39. ''    Rev 1.59   04 Apr 1996 16:27:48   jdonohue
  40. '' Moved IncrementSharedDLLCount and Lot_DoSharedDLLs from inst.lss to main.lss
  41. '' since inst PostConfig processing not done for node since install not copied
  42. '' 
  43. ''    Rev 1.58   02 Apr 1996 11:48:06   jdonohue
  44. '' Call MarkLanguageSubdir for INSTDIR only in node install
  45. '' 
  46. ''    Rev 1.57   01 Apr 1996 08:54:44   jdonohue
  47. '' Register "INSTDIR" with MarkLanguageSubdir since the destination of secondary
  48. '' language files to the server is subdirectory of main product directory
  49. '' 
  50. ''    Rev 1.56   27 Mar 1996 13:15:22   jdonohue
  51. '' Changed LOTUSFONTSDIR handling to mimic WIN/WINSYS fonts go to win directory
  52. '' on server
  53. '' 
  54. ''    Rev 1.55   18 Mar 1996 13:14:18   jdonohue
  55. '' Ref SPR:LSCR32TQHP
  56. '' Use IsNewShell instead of WhatPlatform for determination of LOTUSFONTS directory
  57. '' 
  58. ''    Rev 1.54   12 Mar 1996 15:37:36   jdonohue
  59. '' Moved call to FixupSourceDirSymbol for SYM_LOTUSFONTSDIR$ to InitINST
  60. '' 
  61. ''    Rev 1.53   04 Mar 1996 15:47:06   jdonohue
  62. '' Only call Lot_RegisterFonts for standard and node install
  63. '' 
  64. ''    Rev 1.52   04 Mar 1996 14:23:14   jdonohue
  65. '' Only call Lot_DoSharedDLLs for standard and node
  66. '' 
  67. ''    Rev 1.51   04 Mar 1996 08:31:46   jdonohue
  68. '' Remove 16 bit shared component support -- pass 1 : eliminate LOTUSAPP
  69. '' 
  70. ''    Rev 1.50   28 Feb 1996 15:01:02   jdonohue
  71. '' Added subs IncrementSharedDLLCount and Lot_DoSharedDLLs to increment shared DLL
  72. '' reference count in PostCopyConfigINST
  73. '' 
  74. ''    Rev 1.49   02 Feb 1996 14:42:10   jdonohue
  75. '' Fixed bug with symbol list name not getting set for node in InitInst
  76. '' 
  77. ''    Rev 1.48   29 Jan 1996 16:43:14   jdonohue
  78. '' Fixed error in adding SYM_LOTUSFONTSDIR to list
  79. '' 
  80. ''    Rev 1.47   25 Jan 1996 16:18:40   jdonohue
  81. '' Add SYM_LOTUSFONTSDIR$ to the Directory symbol table list for INST to make
  82. '' sure it gets into the cinstall.ini file
  83. '' 
  84. ''    Rev 1.46   24 Jan 1996 16:08:48   jdonohue
  85. '' Ref SPR:    JHOH327JVA
  86. '' Fixed logic error in setting LOTUSUSERDIR
  87. '' 
  88. ''    Rev 1.45   18 Jan 1996 13:38:16   jdonohue
  89. '' Register all the Windows system fonts installed with call to Lot_RegisterFonts
  90. '' 
  91. ''    Rev 1.44   17 Jan 1996 11:43:54   jdonohue
  92. '' Fixed bug setting SYM_LOTUSUSERDIR$ - append \ where not needed
  93. '' 
  94. ''    Rev 1.43   10 Jan 1996 16:51:18   jdonohue
  95. '' Changed SetUserHomeDirectory to locate the user component files in a
  96. '' subdirectory of the node root, or the original install location for that user
  97. '' if there is one in the registry
  98. '' 
  99. ''    Rev 1.42   09 Jan 1996 14:25:34   jdonohue
  100. '' Reset the source for node install for LOTUSFONTSDIR sections in PreCopyConfig
  101. '' 
  102. ''    Rev 1.41   02 Jan 1996 16:19:58   jdonohue
  103. '' Reset destination of all files that have destination directory symbol
  104. '' LOTUSFONTSDIR
  105. '' 
  106. ''    Rev 1.40   02 Jan 1996 15:58:04   jdonohue
  107. '' Determine the location of the Windows fonts directory and set symbol
  108. '' SYM_LOTUSFONTSDIR$ in InitInst.
  109. '' 
  110. ''    Rev 1.39   28 Dec 1995 10:54:36   jdonohue
  111. '' Added sub SetUserHomeDirectory for multi-user configuration
  112. '' 
  113. ''    Rev 1.38   22 Dec 1995 14:27:08   jdonohue
  114. '' Use the language acronym instead of the language for the install node icons
  115. '' 
  116. ''    Rev 1.37   22 Dec 1995 10:13:18   jdonohue
  117. '' Removed all references to SYM_PARENTDIR$ -- is now SYM_BASEDIR$ for all
  118. '' 
  119. ''    Rev 1.36   26 Oct 1995 15:25:16   tveerapp
  120. '' FIxed IF END IF for SYM_LOTUSUSERDIR processing in PrecopyConfigINST.
  121. '' 
  122. ''    Rev 1.35   Oct 24 1995 16:55:46   cmoy
  123. '' removed eof char
  124. '' 
  125. ''    Rev 1.34   24 Oct 1995 15:42:38   jdonohue
  126. '' Fixed syntax error
  127. '' 
  128. ''    Rev 1.33   24 Oct 1995 15:25:04   jdonohue
  129. '' Make sure SYM_LOTUSUSERDIR$ not blank before refresh
  130. '' 
  131. ''    Rev 1.32   24 Oct 1995 11:49:42   jdonohue
  132. '' Added dummy call to InitLanguages
  133. '' 
  134. ''    Rev 1.31   19 Oct 1995 14:57:16   jdonohue
  135. '' Refresh "LOTUSUSERDIR" destination in PreCopyConfig
  136. '' 
  137. ''    Rev 1.30   11 Oct 1995 15:57:22   glutz
  138. '' AddIconINST sets working directory.
  139. '' 
  140. ''    Rev 1.29   26 Sep 1995 09:01:30   jdonohue
  141. '' Fixed preventing overwrite of cinstall.ini, .inf for language install
  142. '' 
  143. ''    Rev 1.28   25 Sep 1995 12:51:28   jdonohue
  144. '' Added placeholder function InitLanguageINST
  145. '' 
  146. ''    Rev 1.27   Sep 25 1995 09:52:24   cmoy
  147. '' Prevent overwrite of cinstall.ini, xxx.lss by supressing INSTTOP section inst
  148. '' ead of INSTFILES section
  149. '' 
  150. ''    Rev 1.26   07 Sep 1995 14:55:18   tveerapp
  151. '' Moved the setting of INSTDIR during a language server install from
  152. '' main.lss to fix spr# WED2SVNRDZ
  153. '' 
  154. ''    Rev 1.25   01 Sep 1995 09:35:18   jdonohue
  155. '' Turn off INSTLANG?? section for language install
  156. '' 
  157. ''    Rev 1.24   18 Aug 1995 16:43:12   glutz
  158. '' INITInst sets InitDir to SYM_PARENTDIR$.
  159. '' 
  160. ''    Rev 1.23   14 Aug 1995 13:41:46   jdonohue
  161. '' Added code to add language qualifier to node icon in AddIconsINST
  162. '' 
  163. ''    Rev 1.22   14 Aug 1995 09:09:26   jdonohue
  164. '' Added code to handle language install to server
  165. '' 
  166. ''    Rev 1.21   02 Aug 1995 14:56:28   amontalv
  167. '' Added name of product to node install shortcut.
  168. '' 
  169. ''    Rev 1.20   17 Jul 1995 15:53:58   amontalv
  170. '' Added code to put install in program folder for server install.
  171. '' 
  172. ''    Rev 1.19   03 May 1995 18:14:14   mzgripce
  173. '' replace #else with 'else
  174. '' 
  175. ''    Rev 1.18   02 May 1995 12:52:42   cmoy
  176. '' Merged c2 into cf build
  177. '' 
  178. ''    Rev 1.18   10 Apr 1995 18:09:14   amontalv
  179. '' Changed comments to reflect change of function reference.
  180. '' 
  181. ''    Rev 1.17   02 Feb 1995 14:27:06   cmoy
  182. '' 
  183. '' Thangaraj added fixes for Pipeline Problem
  184. '' 
  185. ''    Rev 1.16   13 Jan 1995 17:17:58   tveerapp
  186. '' 
  187. '' Removed redundant code
  188. '' 
  189. ''    Rev 1.15   12 Jan 1995 15:30:42   tveerapp
  190. '' 
  191. '' 1. changed cmoVital to cmoOverwrite for making the LAUNCHEXE entry in cinstall.ini
  192. '' 2. Removed MakePath.It cannot handle file names with paths in it. e.g. reg\foo.exe
  193. '' 
  194. ''    Rev 1.14   11 Jan 1995 15:32:08   tveerapp
  195. '' 
  196. '' Fixed spr# TVEN28TJK:
  197. '' The cinstall.ini in the temporary directory is used to determine if the product
  198. '' being installed supports pipeline(based on the existence of the LAUNCHEXE entry)
  199. '' If it does, a global flag is set to indicate this and an enrty is made in the
  200. '' cinstall.ini that is installed on the machine.
  201. '' If the flag is set and the execuatble exists, it is launched.
  202. '' 
  203. ''    Rev 1.13   29 Dec 1994 12:23:14   tveerapp
  204. '' 
  205. '' Fixed AND _.
  206. '' 
  207. ''    Rev 1.12   29 Dec 1994 12:15:28   tveerapp
  208. '' 
  209. '' Added a check for pipeline processing to be launched only for a non-automated 
  210. '' install.
  211. '' 
  212. ''    Rev 1.11   28 Dec 1994 16:13:50   tveerapp
  213. '' 
  214. '' Added pipeline processing (electronic registration). Functions PostCopyConfig
  215. '' and PostSuccessReg have these changes. Removed the callback for the elrctronic
  216. '' registration dialog.
  217. '' 
  218. ''    Rev 1.10   12 May 1994 11:20:52   mmeth
  219. '' Adding Icons for Lic and Install and using DoMsgBox instead of MessageBox
  220. '' 
  221. ''    Rev 1.9   02 May 1994 18:34:02   mzgripce
  222. '' 
  223. '' add AddIconsINST()
  224. '' 
  225. ''    Rev 1.8   04 Apr 1994 18:10:44   mmeth
  226. '' Now can ignore share.lss & shared.ini
  227. '' 
  228. ''    Rev 1.7   22 Mar 1994 12:34:16   mmeth
  229. '' added licdir & instdir to toolkit registration
  230. '' 
  231. ''    Rev 1.6   28 Feb 1994 14:27:42   mmeth
  232. '' Incorrectly reseting INSTDIR in PrecopyCOnfigINST
  233. '' 
  234. ''    Rev 1.5   18 Feb 1994 13:29:42   mmeth
  235. '' 
  236. '' Now check for Listlength of Reg_GetDirSymbolList
  237. '' 
  238. ''    Rev 1.4   17 Feb 1994 10:23:06   mmeth
  239. '' Added Reg_SetAllowUserToChoseInSMartSUite
  240. '' 
  241. ''    Rev 1.3   16 Feb 1994 11:00:22   mmeth
  242. '' Added error message if INSTTOP sec is
  243. '' 
  244. ''    Rev 1.2   15 Feb 1994 15:33:58   mmeth
  245. '' took out a print
  246. '' 
  247. ''    Rev 1.1   15 Feb 1994 14:48:30   mmeth
  248. '' fixed BASEDIR & Reg_GetDirSymbolLIst(1)
  249. '' 
  250. ''    Rev 1.0   11 Feb 1994 10:56:44   jbrodeur
  251. '' Initial Revision
  252. ''----------------------------------------------------------------------
  253. ''   Date     Vers. Pgmr  SPR#  Change
  254. ''----------------------------------------------------------------------
  255. ''  2-08-94   0004  MMETH       moved checking first prod for change to Initcopylist
  256. ''  2-04-94   0003  MMETH       changed PreCopyConfig to work for SmartSuite
  257. ''  2-03-94   0002  MMETH       corrected 1 prod vs smartsuite
  258. ''  2-02-94   0001  MMETH       cinstall.ini install for standard and server
  259. ''  1-25-94   0000              Initial Check-In
  260. '' !
  261. ''
  262. ''----------------------------------------------------------------------
  263. ''
  264. ''*********************************************************************/
  265.  
  266. USE "TOOLKIT"
  267. USE "LANGUAGE"
  268. OPTION DECLARE
  269.  
  270.  
  271. '** These Are the Required Functions that Products must provide
  272. '***************************************************************
  273. DECLARE PUBLIC FUNCTION ProductRegINST (prodno%, network$, direction$) AS STRING
  274. DECLARE PUBLIC FUNCTION DefaultUserRegINST (prodno%, network$, direction$) AS STRING
  275. DECLARE PUBLIC FUNCTION InitINST (prodno%, network$, direction$, basedir$) AS STRING
  276. DECLARE PUBLIC FUNCTION PathChangeINST (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  277. DECLARE PUBLIC FUNCTION InitCopyListINST (prodno%, network$, direction$) AS STRING
  278. DECLARE PUBLIC FUNCTION PreCopyConfigINST (prodno%, network$, direction$, lic%) AS STRING
  279. DECLARE PUBLIC FUNCTION AddTheBillBoardsINST (prodno%, network$, direction$, nbytes&) AS STRING
  280. DECLARE PUBLIC FUNCTION PostCopyConfigINST (prodno%, network$, direction$, programgroup$) AS STRING
  281. DECLARE PUBLIC FUNCTION AddIconsINST (prodno%, network$, direction$, programgroup$) AS STRING
  282. DECLARE PUBLIC FUNCTION UIINST (prodno%, network$, direction$) AS STRING
  283. DECLARE PUBLIC FUNCTION PostSuccessRegINST (prodno%, network$, direction$) AS STRING
  284. DECLARE PUBLIC FUNCTION InitLanguageINST (prodno%, network$, direction$) AS STRING
  285.  
  286. '** Product specific functions
  287. '*****************************
  288. DECLARE FUNCTION GetINSTPathfromLotusIni() AS STRING
  289. DECLARE SUB SetUserHomeDirectory() 
  290.  
  291. ' ** Global flag for launching pipeline exe
  292. PUBLIC gProdsupport%
  293.  
  294. '*************************************************************************
  295. '**************************** Required Functions *************************
  296. '*************************************************************************
  297.  
  298. '*************************************************************************
  299. '** SUB Initialize
  300. '**
  301. '** Purpose: Initialize the INST product scripts. There is only one purpose
  302. '**          of this routine, it is to register **your product**. Without
  303. '**          this function, your product will not install.  All you
  304. '**          you need to do in this subroutine is:
  305. '**                   modify INST -> your acronmy.
  306. '**          NOTE: so as not to clutter up the INSTCUI.RC file,
  307. '**                we always use SID_INST.  You of course can be more
  308. '**                creative!
  309. '**
  310. '**          ASSUMPTIONS: Many things in the toolkit key off of your
  311. '**                       Acronym. These are the constraints:
  312. '**                     1. your top level chapther in the INF must
  313. '**                        have a KEYWORD of your Acronym +"TOP"
  314. '**                           e.g. INSTTOP
  315. '** Author:  Marcel Meth  
  316. '** Arguments: None
  317. '** Returns:   NONE
  318. '*************************************************************************
  319. SUB Initialize
  320.    Reg_RegisterProductNames "INST", LdString(SID_BLANKTEXT) 
  321. END SUB
  322.  
  323. '*************************************************************************
  324. '** FUNCTION ProductRegINST (prodno%, network$, direction$) AS INTEGER
  325. '**
  326. '** Purpose: This function allows your product to register itself
  327. '**          in the Install Product Registry.  The toolkit squirrles
  328. '**          the information provided and will provide you with
  329. '**          various features accordingly.  For example, if you support
  330. '**          shared files, the toolkit will do most of the work
  331. '**          for the COMPENT directory.
  332. '**
  333. '**          For the most part you should use only Reg_Set... Functions.
  334. '**          
  335. '**
  336. '**          If you turn on ATM, LICENSING, or and SHARED tools, then
  337. '**          you must be sure to add the appropriate lines and files
  338. '**          in you INST.SCR and INST.LYT, respectively. See Cook book.
  339. '**
  340. '**          If you support server, you will have to make sure that
  341. '**          you have the correct entire for the install files in your
  342. '**          INST.SCR and INST.LYT
  343. '**
  344. '** Arguments:  All paremeters are **read only**. 
  345. '**          prodno%: This is your prodno%.  It is assigned to you by the
  346. '**                   toolkit in the order in which you were  registered.
  347. '**                   When your product is oart of Smart Suite, Smart Suite
  348. '**                   will always be product #1. (prodno% >=1)
  349. '**          network$: UNINITIALIZED
  350. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  351. '**                      then step backwards, i.e start at your last dialog
  352. '**                      first.
  353. '**     
  354. '** Errors:    No return code for errors, you must Raise them
  355. '** Author:    MMeth
  356. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  357. '**                             allow the user to step backwards.)
  358. '*************************************************************************
  359.  
  360. PUBLIC FUNCTION ProductRegINST (prodno%, network$, direction$) AS STRING
  361.    ProductRegINST = gNEXT
  362.  
  363.    Reg_SetSupportedInstallTypes prodno%, 1, 1, 1
  364.    'Reg_SetSelectedInstallType ProdNo%,TypeSelected$  
  365.    Reg_SetProdSizes prodno%, 524288, 524288 ' .5 meg.
  366.    Reg_SetUIInOrOut prodno%, 1  
  367.    Reg_SetShareFlags prodno%, 0, 0, 0, 0 
  368.  
  369.    Reg_SetAllowUserToPickInSuite prodno%, 0
  370.  
  371.    'NO NEED TO SET SINCE THER IS NO CD SUPPORT.
  372.    'Reg_SetCDOption prodno%,Inst%,CDOptStr$ 
  373.    'Reg_SetCDOptionSelected ProdNo%,Inst%,Selection% 
  374.  
  375.    'DEAL WITH LATER
  376.    'Reg_SetNodeOption ProdNo%,Inst%,NodeOptStr$  
  377.    'Reg_SetNodeOptionSelected ProdNo%,Inst%,Selection% 
  378.    Reg_SetSrvSupport prodno%, 1
  379.    Reg_SetLicenseSupport prodno%, 0
  380.    Reg_SetATMSupport prodno%, 0
  381.  
  382.    'Reg_SetProgManagerGroup prodno%, LdString(SID_INST)
  383.  
  384.  
  385. END FUNCTION
  386.  
  387. '*************************************************************************
  388. '** FUNCTION DefaultUserRegINST (prodno%, network$, direction$) AS STRING
  389. '**
  390. '** Purpose: **Only** the first registered product gets called.
  391. '**          For SMartSUite, this will be Smart Suite.
  392. '**          This functions allows you to set the default user reg.
  393. '**          information that the user will be shown. The toolkit
  394. '**          will provide default values from MS-Windows. If you disagree
  395. '**          with them you should modify them in this function using:
  396. '**          SetSymbolValue on SYM_NAME, SYM_COMPANY & SYM_SERIALNUM$
  397. '**          
  398. '**          It is upto you how you store registration information.
  399. '**          it will not be stored until later in PostCopyConfigINST.
  400. '**          The CIT provides functions that allow you to access .ri 
  401. '**          files: Lot_ReadDefaultsfromRi(ripath$).
  402. '**
  403. '**          If you need to write back to the floppy, do it here.
  404. '**          Most Lotus products will no longer write back to the floppy.
  405. '**          Remeber, you can't write back to a CD or network!
  406. '**
  407. '** In Symbols : SYM_NAME$, SYM_COMPANY$
  408. '** Out Symbols: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
  409. '**            
  410. '** Arguments:  All paremeters are **read only**. 
  411. '**          prodno%: This is your prodno%.  It is assigned to you by the
  412. '**                   toolkit in the order in which you were  registered.
  413. '**                   When your product is oart of Smart Suite, Smart Suite
  414. '**                   will always be product #1. (prodno% >=1)
  415. '**          network$: UNINITIALIZED
  416. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  417. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  418. '**                      then step backwards
  419. '**     
  420. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  421. '**                      then step backwards, i.e start at your last dialog
  422. '**                      first.
  423. '**     
  424. '** Errors:    No return code for errors, you must Raise them
  425. '** Author:    MMeth
  426. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  427. '**                             allow the user to step backwards.)
  428. '*************************************************************************
  429.  
  430. PUBLIC FUNCTION DefaultUserRegINST (prodno%, network$, direction$) AS STRING
  431.  
  432.    DefaultUserRegINST = gNEXT
  433.  
  434. END FUNCTION
  435.  
  436.  
  437. '*************************************************************************
  438. '** FUNCTION InitINST (prodno%, network$, direction$, basedir$) AS STRING
  439. '**
  440. '** Purpose: This is the first time you will be called when
  441. '**          the server parmater us valid.  You need to use this
  442. '**          function to intialize certain things. (See the MUST DO
  443. '**          below).
  444. '**          
  445. '**          This is a good place to put up a dialog warning the user
  446. '**          of a prrevious version of your product. If there is a previous
  447. '**          version you might want to steer them twords or away from it.
  448. '**          
  449. '**
  450. '** Must Do: You **MUST** set inital values for all of the destination
  451. '** =======  directories that you refer to in your INF file.  If you do not,
  452. '**          then InitCopylist will fail!  e.g. SetSymbolValue "INSTDIR", basedir$
  453. '**          Of course you may be more intelligent.  You should preface your
  454. '**          directory with basedir$.  The toolkit is finding a good drive
  455. '**          letter and basedirectory.  Also, remeber all paths end in a
  456. '**          \ and are lower case.
  457. '**
  458. '**          You should **NOT** define LOTUSFONTSDIR, LOTUSUSERDIR, WINDIR, &
  459. '**          WINSYSDIR. The toolkit does this for you.
  460. '**
  461. '**          Once you have defined destdir symbols, you need to register
  462. '**          them with the toolkit. (See the code below)
  463. '**
  464. '** In Symbols : 
  465. '** Out Symbols: 
  466. '**            
  467. '** Arguments:  All paremeters are **read only**. 
  468. '**          prodno%: This is your prodno%.  It is assigned to you by the
  469. '**                   toolkit in the order in which you were  registered.
  470. '**                   When your product is oart of Smart Suite, Smart Suite
  471. '**                   will always be product #1. (prodno% >=1)
  472. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  473. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  474. '**                      then step backwards
  475. '**     
  476. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  477. '**                      then step backwards, i.e start at your last dialog
  478. '**                      first.
  479. '**
  480. '**          basedir$:   The toolkit has found a good base. for your directory.
  481. '**                      This is it.  You should use it.  This will make Smart
  482. '**                      Suite work, and will pick a good drive letter for you.
  483. '**     
  484. '** Errors:    No return code for errors, you must Raise them
  485. '** Author:    MMeth
  486. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  487. '**                             allow the user to step backwards.)
  488. '**
  489. '*************************************************************************
  490.  
  491. PUBLIC FUNCTION InitINST (prodno%, network$, direction$, basedir$) AS STRING
  492. DIM dirSym$, sym$, symname$, i%
  493.  
  494.    InitINST = direction$
  495.    '' In the backwards case, keep backing up
  496.    If direction$ = gBACK Then
  497.       EXIT FUNCTION
  498.    End If
  499.  
  500.     i% = 1
  501.     sym$ = Reg_GetDirSymbolList(prodno%)
  502.     symname$ = sym$ + gNAME
  503.         
  504.    If network$ <> gSERVER AND network$ <> gSTANDARD AND network$ <> gDISTRIBUTION$ Then
  505.          Reg_SetUIInOrOut prodno%, FALSE
  506.    Else
  507.       '** Figure out where the first product is., put install there!
  508.       IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSINGLE$ THEN
  509.          SetSymbolValue "INSTDIR", GetSymbolValue(SYM_BASEDIR$)
  510.       Else
  511.          SetSymbolValue "INSTDIR", basedir$
  512.       End If
  513.  
  514.       SetSymbolValue "INSTDIRNAME", " "
  515.  
  516.       SetListItem sym$, 1, "INSTDIR"
  517.       SetListItem symname$, 1, "INSTDIR" + gNAME$
  518.         i% = i% + 1
  519.  
  520.    End If
  521. '**
  522. '**    Determine the location of the Windows fonts directory and set symbol
  523. '**    SYM_LOTUSFONTSDIR$
  524.    If network$ = gNODE OR network$ = gSTANDARD THEN 
  525.         IF IsNewShell() THEN
  526.             SetSymbolValue SYM_LOTUSFONTSDIR$, GetSymbolValue(SYM_WINDIR$) _
  527.                 + LdString(SID_FONTS95_DIR) + "\"
  528.         ELSE
  529.             SetSymbolValue SYM_LOTUSFONTSDIR$, GetSymbolValue(SYM_WINSYSDIR$)
  530.         END IF
  531.     END IF
  532.  
  533.     ' Initialize SYM_LOTUSUSERDIR$ symbol
  534.     SetUserHomeDirectory
  535.  
  536.     ' The destination of secondary language files to the server is subdirectory
  537.     ' of main product directory
  538.    If network$ = gNODE THEN _
  539.         MarkLanguageSubdir("INSTDIR")
  540.         
  541.     ' Make sure special CIT symbols get into Cinstall.ini
  542.     dirSym$ = SYM_LOTUSFONTSDIR$ 
  543.     SetListItem sym$, i%, dirSym$
  544.     SetListItem symname$, i%, dirSym$ + gNAME$
  545.     i% = i% + 1
  546.     dirSym$ = SYM_LOTUSUSERDIR$ 
  547.     SetListItem sym$, i%, dirSym$
  548.     SetListItem symname$, i%, dirSym$ + gNAME$
  549.     i% = i% + 1
  550.     
  551. END FUNCTION
  552.  
  553.  
  554. '*************************************************************************
  555. '** FUNCTION PathChangeINST (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  556. '**
  557. '** Purpose: This function is called whenever the user proposes changes
  558. '**          to a path for your product.  by the time this function calls
  559. '**          you, the paths have already been checked syntactically, and
  560. '**          the directory has been checked to see that it is in fact writeable.
  561. '**          Your obligation is to verify that the proposed new path is okay with
  562. '**          you.  If, not, put up a dialog telling the user and return
  563. '**          gBACK.
  564. '**          
  565. '** In Symbols : 
  566. '** Out Symbols: 
  567. '**            
  568. '** Arguments:  All paremeters are **read only**. 
  569. '**          prodno%: This is your prodno%.  It is assigned to you by the
  570. '**                   toolkit in the order in which you were  registered.
  571. '**                   When your product is oart of Smart Suite, Smart Suite
  572. '**                   will always be product #1. (prodno% >=1)
  573. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  574. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  575. '**                      then step backwards
  576. '**      destdirsym$: The destdir symbol that has changed. e.g. "INSTDIR"
  577. '**   mainprodsonly%: (TRUE | FALSE) , when TRUE this means that only
  578. '**                   your top level product directory should change,
  579. '**                   probably "INSTDIR"
  580. '**     
  581. '** Errors:    No return code for errors, you must Raise them
  582. '** Author:    MMeth
  583. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  584. '**                             allow the user to step backwards.)
  585. '**
  586. '*************************************************************************
  587.  
  588. PUBLIC FUNCTION PathChangeINST (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  589. DIM path$
  590.  
  591.    PathChangeINST = gNEXT
  592.  
  593.    path$ = GetSymbolValue (destdirsym$)
  594.    '' The following is a psudocode example
  595.    ''''''rc$ = DetectVersionPriorToDarwin(path$)
  596.    ''''''If rc$ = "BEAGLE" then
  597.    ''''''   ShowPathError SID_BEAGLE_FOUND, SID_ERR_EXISTBEAGLE, path$
  598.    ''''''   PathChangeINST = gBACK
  599.    ''''''end if   
  600.  
  601. END FUNCTION
  602.  
  603.  
  604. '*************************************************************************
  605. '** FUNCTION InitCopyListINST (prodno%, network$, direction$) AS STRING
  606. '**
  607. '** Purpose:  Product must Initialize the copylist
  608. '**          
  609. '** Must Do: You must initialize the copy list.  However,
  610. '** =======  if you leve the code totally untouched as is,
  611. '**          it will probably work for you.
  612. '**
  613. '** In Symbols : 
  614. '** Out Symbols: 
  615. '**            
  616. '** Arguments:  All paremeters are **read only**. 
  617. '**          prodno%: This is your prodno%.  It is assigned to you by the
  618. '**                   toolkit in the order in which you were  registered.
  619. '**                   When your product is oart of Smart Suite, Smart Suite
  620. '**                   will always be product #1. (prodno% >=1)
  621. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  622. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  623. '**                      then step backwards
  624. '**     
  625. '** Errors:    No return code for errors, you must Raise them
  626. '** Author:    MMeth
  627. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  628. '**                             allow the user to step backwards.)
  629. '**
  630. '*************************************************************************
  631.  
  632. PUBLIC FUNCTION InitCopyListINST (prodno%, network$, direction$) AS STRING
  633. DIM i%, sym$, chpt$
  634.  
  635.    InitCopyListINST = direction$
  636.    '' In the backwards case, keep backing up
  637.    If direction$ = gBACK Then
  638.       EXIT FUNCTION
  639.    End If
  640.  
  641.    sym$ = Reg_GetProductAcronym(prodno%) + gTOP$
  642.    chpt$ = Lot_GetChapterFromKeyWord(sym$)
  643.  
  644.    if chpt$ = "" then   
  645.       ErrorMsg 0, "Developers: You need to have install section with INSTTOP in INF file"
  646.       ERROR STFQUIT
  647.    end if
  648.  
  649.    SELECT CASE Reg_GetProdSelectedInstallType(prodno%)
  650.  
  651.    CASE gCOMPLETE$
  652.       i% = F_COMPLETE
  653.    CASE gLAPTOP$
  654.       i% = F_LAPTOP
  655.    CASE gCUSTOM$
  656.       i% = F_CUSTOM
  657.    END SELECT
  658.  
  659.    Lot_InitializeCopyList chpt$, i%
  660.  
  661.    '** FOR STANDARD we only want to install the cinstall.ini file
  662.    If network$ <> gSERVER$ Then
  663.       If FIsKeywordinCopyList ("INSTFILES") <> FALSE Then
  664.          chpt$ =  Lot_GetChapterFromKeyword("INSTFILES")
  665.          Lot_ToggleChapterFilesInCopyList chpt$              
  666.       End If
  667.    End If
  668.         
  669.     'For a language install, we don't overwrite the cinstall.ini and .INF files
  670.     'by turning off the INSTTOP section
  671.    IF network$ <> gSERVER$ THEN
  672.    IF GetSymbolValue(SYM_INSTALLKIND$) = gLANGUAGEINSTALL$ THEN
  673.         chpt$ =  Lot_GetChapterFromKeyword("INSTTOP")
  674.         Lot_SetChapterFilesInCopyListInOrOut chpt$, 0 
  675.     END IF
  676.    END iF
  677.     
  678. END FUNCTION
  679.  
  680. '*************************************************************************
  681. '** FUNCTION UIINST (prodno%, network$, direction$) AS STRING
  682. '**
  683. '** Purpose: This is your chance to put up any User Interface
  684. '**          that you want.  remeber, try to keep it short.
  685. '**          In Smart Suite, if every product puts up to extra
  686. '**          dialogs, then the Smart SUite will consist of 16 dialogs!
  687. '**          
  688. '**          Pay attention to the value of direction, if you are putting
  689. '**          up more than one dialog.
  690. '**
  691. '**          The toolkit will do an acurate space computation later,
  692. '**          so you can tamper with the copy list. But you shouldn't
  693. '**          write out anything to the disk until PostCopyCofig!
  694. '**   
  695. '** In Symbols : 
  696. '** Out Symbols: 
  697. '**            
  698. '** Arguments:  All paremeters are **read only**. 
  699. '**          prodno%: This is your prodno%.  It is assigned to you by the
  700. '**                   toolkit in the order in which you were  registered.
  701. '**                   When your product is oart of Smart Suite, Smart Suite
  702. '**                   will always be product #1. (prodno% >=1)
  703. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  704. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  705. '**                      then step backwards
  706. '**     
  707. '** Errors:    No return code for errors, you must Raise them
  708. '** Author:    MMeth
  709. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  710. '**                             allow the user to step backwards.)
  711. '**
  712. '*************************************************************************
  713.  
  714. PUBLIC FUNCTION UIINST (prodno%, network$, direction$) AS STRING
  715.    UIINST = direction$
  716.    '' In the backwards case, keep backing up
  717.    If direction$ = gBACK Then
  718.       EXIT FUNCTION
  719.    End If
  720.  
  721. END FUNCTION
  722.  
  723.  
  724. '*************************************************************************
  725. '** FUNCTION PreCopyConfigINST (prodno%, network$, direction$, lic%) AS STRING
  726. '**
  727. '** Purpose: This is the very last function called before the space is
  728. '**          acurately computed (to the last byte) and files are copied
  729. '**          by the toolkit.  If you have any last minute changes to
  730. '**          do, this is the time to do them.  example:
  731. '**          Test for monitor resolution, and turn on the chapter
  732. '**          in the copy list with the appropriate resoltuion.
  733. '**          
  734. '** In Symbols : 
  735. '** Out Symbols: 
  736. '**            
  737. '** Arguments:  All paremeters are **read only**. 
  738. '**          prodno%: This is your prodno%.  It is assigned to you by the
  739. '**                   toolkit in the order in which you were  registered.
  740. '**                   When your product is oart of Smart Suite, Smart Suite
  741. '**                   will always be product #1. (prodno% >=1)
  742. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  743. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  744. '**                      then step backwards
  745. '**             lic%: TRUE | FALSE; TRUE licensing is turned on else it is off
  746. '**     
  747. '** Errors:    No return code for errors, you must Raise them
  748. '** Author:    MMeth
  749. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  750. '**                             allow the user to step backwards.)
  751. '**
  752. '*************************************************************************
  753.  
  754. PUBLIC FUNCTION PreCopyConfigINST (prodno%, network$, direction$, lic%) AS STRING
  755. DIM dirSym$
  756.  
  757.    PreCopyConfigINST = gNEXT
  758.  
  759.    '* Just in case product 1 changed.
  760.    If GetSymbolValue (SYM_SINGLESMARTSUITE) =  gSINGLE$ Then
  761.       dirSym$ = Reg_GetDirSymbolList(1)
  762.       If GetListLength(dirSym$) >= 1 Then
  763.          dirSym$ = GetListItem(dirSym$, 1)
  764.       End If
  765.       SetSymbolValue "INSTDIR", GetSymbolValue(dirSym$)
  766.    Else
  767.       SetSymbolValue "INSTDIR", GetSymbolValue (SYM_BASEDIR$)
  768.    End If
  769.  
  770.    '** TV: We have to reset this symbol for language/server install 
  771.    IF GetSymbolValue(SYM_INSTALLKIND$) = gLANGUAGEINSTALL$  AND _
  772.       GetSymbolValue(SYM_NETWORK$) =gSERVER$ THEN 
  773.       SetLanguageSubdir  "INSTDIR", "INSTDIR"  
  774.    END IF
  775.  
  776.    Lot_RefreshDestination ("INSTDIR") 
  777.  
  778.     'Set LOTUSUSERDIR for user files on node
  779.     'may have been changed if BASEDIR changes through UI
  780.     SetUserHomeDirectory
  781.    IF GetSymbolValue(SYM_LOTUSUSERDIR$) <> "" THEN _
  782.         Lot_RefreshDestination (SYM_LOTUSUSERDIR$) 
  783.  
  784. END FUNCTION
  785.  
  786.  
  787. '*************************************************************************
  788. '** FUNCTION  AddTheBillBoardsINST (prodno%, network$, direction$, nbytes&)
  789. '**
  790. '** Purpose: This is where to add the billboards using the function:
  791. '**          AddToBillboardList. Use nbytes& as the last parameter to
  792. '**          the MS-SETUP function AddToBillboardList
  793. '**
  794. '** In Symbols : 
  795. '** Out Symbols: 
  796. '**            
  797. '** Arguments:  All paremeters are **read only**. 
  798. '**          prodno%: This is your prodno%.  It is assigned to you by the
  799. '**                   toolkit in the order in which you were  registered.
  800. '**                   When your product is oart of Smart Suite, Smart Suite
  801. '**                   will always be product #1. (prodno% >=1)
  802. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  803. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  804. '**                      then step backwards
  805. '**           nbytes: Determines the duration of billboard timing.
  806. '**     
  807. '** Errors:    No return code for errors, you must Raise them
  808. '** Author:    MMeth
  809. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  810. '**                             allow the user to step backwards.)
  811. '**
  812. '*************************************************************************
  813.  
  814. PUBLIC FUNCTION AddTheBillBoardsINST (prodno%, network$, direction$, nbytes&) AS STRING
  815.    AddTheBillBoardsINST = direction$
  816.    '' In the backwards case, keep backing up
  817.    If direction$ = gBACK Then
  818.       EXIT FUNCTION
  819.    End If
  820.  
  821.    'psudo code follows as an example
  822.    ''''If network$ <> gNODE$ Then
  823.    ''''   SetListItem "IDC_BMP", 1, STR$(IDD_BILLBD1_BMP)
  824.    ''''   AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_BILLBD1, "_FNameOrgDlgProc@16", nbytes& 
  825. '      else
  826.    ''''   AddToBillboardList GetSymbolValue(SYM_CUIDLL$), DB_BILLBD1, "FNameOrgDlgProc", nbytes& 
  827.    ''''End If
  828.  
  829. END FUNCTION
  830.  
  831. '*************************************************************************
  832. '** FUNCTION PostCopyConfigINST (prodno%, network$, direction$, programgroup$) AS STRING
  833. '**
  834. '** Purpose: This is called just after file copy has completed.
  835. '**          This is your opportunity to do all the configuaration
  836. '**          you need.  This includes:
  837. '**          
  838. '**          1. Writing to all your ini files
  839. '**          2. Writeing to OLE Reg database
  840. '**          3. Writing to any other confi files you may support
  841. '**          4. Writing out user registration information
  842. '**          5. Add program manager icons of those features
  843. '**             thatwere installed.
  844. '**          6. Create any working directories.
  845. '**             A working directory is one that does not contain any
  846. '**             files, thus the toolkit did not create it for you.
  847. '**
  848. '**          NOTE: THERE are many subtlties in here if you are
  849. '**                dealing with node and CD installs.  In particular,
  850. '**                you must be ***very*** careful to understand where the
  851. '**                things are that you are pointing to.  They could
  852. '**                be on the node, server, or CD!  This, in combination
  853. '**                with the INF file for Server/Node is probably the trickiest
  854. '**                part of writing a quality install.  When configuring,
  855. '**                you must be careful to consider what happens if there is
  856. '**                a preexisting product on the machine, in the same location or
  857. '**                another one!  This is very very tricky.  What happens
  858. '**                if you had a full installation previously in location C:\FOO
  859. '**                and now the user is installing a minimum installation in loaction
  860. '**                D:\FOO. 
  861. '**
  862. '**                Each and every thing you do for configuartion needs very
  863. '**                careful thought.
  864. '**
  865. '**                WE support a function Lot_WhereIsFeature("FeatureID")
  866. '**                This currrently tells you the location of a feature
  867. '**                If the feature appears both in the SERVER.INF and the
  868. '**                NODE.INF referred to by the same Keyword ID.
  869. '**                We do not support CDs with this command yet, but we will at some
  870. '**                time.
  871. '**
  872. '**                Also look out for writing to a file when the directory
  873. '**                doesn't exist.  If the user deselected one of your
  874. '**                you options, your install may still be running,
  875. '**                but since there were no files to copy into the directory
  876. '**                 it wasn't created by the toolkit!
  877. '**
  878. '**                Finally, remember that configuration files generally
  879. '**                hold the state that the user has customized earlier.
  880. '**                Sometimes you don't want to overwrite these!
  881. '**                You will primarily use three MS-SETUP functions
  882. '**                in here: 
  883. '**                  1. CreateIniKeyValue  (writing to ini files)
  884. '**                  2. SetRegKeyValue     (writing to OLE reg DB)
  885. '**                  3. CreateProgmanItem  (writing to progman) 
  886. '**
  887. '**                CreateProgmanGroup &  ShowProgmanGroup are
  888. '**                done for you by the time you reach this
  889. '**                function.
  890. '**
  891. '**                You will not have to do any configuration of LOTUS SHARED
  892. '**                tools.  The toolkit will do this for you.
  893. '** In Symbols : 
  894. '** Out Symbols: 
  895. '**            
  896. '** Arguments:  All paremeters are **read only**. 
  897. '**          prodno%: This is your prodno%.  It is assigned to you by the
  898. '**                   toolkit in the order in which you were  registered.
  899. '**                   When your product is oart of Smart Suite, Smart Suite
  900. '**                   will always be product #1. (prodno% >=1)
  901. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  902. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  903. '**                      then step backwards
  904. '**    programgroup$: The name of the program group the user chose to
  905. '**                   install the program manager icons     
  906. '**
  907. '** Errors:    No return code for errors, you must Raise them
  908. '** Author:    MMeth
  909. '** Returns:   return: gNEXT 
  910. '**
  911. '*************************************************************************
  912.  
  913. PUBLIC FUNCTION PostCopyConfigINST (prodno%, network$, direction$, programgroup$) AS STRING
  914.    PostCopyConfigINST = direction$
  915.    '' In the backwards case, keep backing up
  916.    If direction$ = gBACK Then
  917.       EXIT FUNCTION
  918.    End If
  919.    
  920. SKIPCONFIG:
  921.  
  922. END FUNCTION
  923.  
  924. '** PUBLIC FUNCTION AddIconsINST (prodno%, network$, direction$, programgroup$) AS STRING
  925. '** Purpose: This is called just after file copy has completed.
  926. '**          1. Add program manager icons of those features
  927. '**             thatwere installed.
  928. '**
  929. '**          NOTE: THERE are many subtlties in here if you are
  930. '**                dealing with node and CD installs.  In particular,
  931. '**                you must be ***very*** careful to understand where the
  932. '**                things are that you are pointing to.  They could
  933. '**                be on the node, server, or CD!  This, in combination
  934. '**                with the INF file for Server/Node is probably the trickiest
  935. '**                part of writing a quality install.  When configuring,
  936. '**                you must be careful to consider what happens if there is
  937. '**                a preexisting product on the machine, in the same location or
  938. '**                another one!  This is very very tricky.  What happens
  939. '**                if you had a full installation previously in location C:\FOO
  940. '**                and now the user is installing a minimum installation in loaction
  941. '**                D:\FOO. 
  942. '**
  943. '**                Each and every thing you do for configuartion needs very
  944. '**                careful thought.
  945. '**
  946. '**                WE support a function Lot_WhereIsFeature("FeatureID")
  947. '**                This currrently tells you the location of a feature
  948. '**                If the feature appears both in the SERVER.INF and the
  949. '**                NODE.INF referred to by the same Keyword ID.
  950. '**                We do not support CDs with this command yet, but we will at some
  951. '**                time.
  952. '**
  953. '**                Also look out for writing to a file when the directory
  954. '**                doesn't exist.  If the user deselected one of your
  955. '**                you options, your install may still be running,
  956. '**                but since there were no files to copy into the directory
  957. '**                 it wasn't created by the toolkit!
  958. '**
  959. '**                Finally, remember that configuration files generally
  960. '**                hold the state that the user has customized earlier.
  961. '**                Sometimes you don't want to overwrite these!
  962. '**                You will primarily use three MS-SETUP functions
  963. '**                in here: 
  964. '**                  1. CreateProgmanItem  (writing to progman) 
  965. '**
  966. '**                CreateProgmanGroup &  ShowProgmanGroup are
  967. '**                done for you by the time you reach this
  968. '**                function.
  969. '**
  970. '**                You will not have to do any configuration of LOTUS SHARED
  971. '**                tools.  The toolkit will do this for you.
  972. '**            
  973. '** Arguments:  All paremeters are **read only**. 
  974. '**          prodno%: This is your prodno%.  It is assigned to you by the
  975. '**                   toolkit in the order in which you were  registered.
  976. '**                   When your product is oart of Smart Suite, Smart Suite
  977. '**                   will always be product #1. (prodno% >=1)
  978. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  979. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  980. '**                      then step backwards
  981. '**    programgroup$: The name of the program group the user chose to
  982. '**                   install the program manager icons     
  983. '**
  984. '** Errors:    No return code for errors, you must Raise them
  985. '** Author:    MZ
  986. '** Returns:   return: gNEXT 
  987. '**
  988. '*************************************************************************
  989.  
  990. PUBLIC FUNCTION AddIconsINST (prodno%, network$, direction$, programgroup$) AS STRING
  991. DIM instdir$, notused%, Caption$
  992. DIM LanguageQualifier$, LanguageAcronym$
  993.    AddIconsINST = direction$
  994.    '' In the backwards case, keep backing up
  995.    If direction$ = gBACK Then
  996.       EXIT FUNCTION
  997.    End If
  998.  
  999.    If network$ = gSERVER Then
  1000.       instdir$ = Lot_WhereIsFeature(prodno%, "INSTFILES", "install.exe")
  1001.         Caption$ = LdString(SID_INST_VIEWSTRING)+ Reg_GetProductName(1)
  1002.         'Add language qualifier for secondary languages
  1003.         IF GetSymbolValue(SYM_INSTALLKIND$) = gLANGUAGEINSTALL$ THEN 
  1004.             LanguageAcronym$ = GetSymbolValue(SYM_INSTALL_LANGUAGE$) 
  1005.             LanguageQualifier$ = LanguageAcronym$  
  1006.             Caption$ = Caption$ + " " + LanguageQualifier$  
  1007.         END IF
  1008.       ASSERT instdir$ <> "", ""
  1009.        If IsNewShell() THEN
  1010.             notused%=Lot_AddLinkToFolder(prodno%, instdir$ + "install.exe", _
  1011.                                     Caption$+".lnk", _
  1012.                                     Caption$, "", instdir$)
  1013.             Lot_RegisterObject "INSTFILES",UNIN_CLASS_SHORTCUT$, Lot_GetProgFolder(prodno%) + Caption$+".lnk"
  1014.         Else    
  1015.           CreateProgmanItem  programgroup$, Caption$, _
  1016.                   instdir$ + "install.exe", ",,,," + instdir$, cmoOverwrite
  1017.            Lot_RegisterObject "INSTFILES", UNIN_CLASS_ICON$, programgroup$ + "\" + Caption$
  1018.         End If
  1019.    End If
  1020.  
  1021.     ' Register all the Windows system fonts installed
  1022.    IF network$ = gNODE OR network$ = gSTANDARD THEN _
  1023.         Lot_RegisterFonts
  1024.  
  1025. END FUNCTION
  1026.  
  1027.  
  1028.  
  1029. '*************************************************************************
  1030. '** FUNCTION PostSuccessRegINST (prodno%, network$, direction$) AS STRING
  1031. '**
  1032. '** Purpose: If you need to launch something after install runs
  1033. '** In Symbols : 
  1034. '** Out Symbols: 
  1035. '**            
  1036. '** Arguments:  All paremeters are **read only**. 
  1037. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1038. '**                   toolkit in the order in which you were  registered.
  1039. '**                   When your product is oart of Smart Suite, Smart Suite
  1040. '**                   will always be product #1. (prodno% >=1)
  1041. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1042. '**       direction$: gNEXT 
  1043. '**
  1044. '** Errors:    No return code for errors, you must Raise them
  1045. '** Author:    MMeth
  1046. '** Returns:   return: gNEXT 
  1047. '**
  1048. '*************************************************************************
  1049.  
  1050. PUBLIC FUNCTION PostSuccessRegINST (prodno%, network$, direction$) AS STRING
  1051.  
  1052. DIM rc$, ExecError%, notused%, executable$, gInstallIniFile$, prodbaseDir$
  1053. DIM distribution$, automation$
  1054. DIM cwd$, TmpInstallIni$
  1055.  
  1056.    PostSuccessRegINST = direction$
  1057.    '' In the backwards case, keep backing up
  1058.    'If direction$ = gBACK Then
  1059.    '   EXIT FUNCTION
  1060.    'End If
  1061.  
  1062.     'Build the path to the installed cinstall.ini
  1063.     prodbaseDir$ = Lot_GetInstallDir()
  1064.    gInstallIniFile$ = MakePath(prodbaseDir$,gINSTALLINI$)
  1065.  
  1066.    '** the following is to identify if the product currently being installed supports
  1067.    '** the electronic registration. It sets up a global flag to indicate this
  1068.    '** and makes the LAUNCHEXE entry to the installed cinstall.ini
  1069.  
  1070.    cwd$ = GetSymbolValue(SYM_STF_CWDDIR$)
  1071.    TmpInstallIni$ = MakePath(cwd$,gINSTALLINI$)
  1072.    executable$ = GetIniKeyString(TmpInstallIni$, "TOOLKIT","LAUNCHEXE")    
  1073.  
  1074.    IF executable$ <> "" THEN
  1075.       gProdsupport% = 1
  1076.       '** make the exe entry
  1077.       CreateIniKeyValue gInstallIniFile$, "TOOLKIT", "LAUNCHEXE", executable$, cmoOverwrite    
  1078.    ELSE
  1079.       '** The current product that is being installed does not support pipeline
  1080.       gProdsupport% = 0        
  1081.    END IF
  1082.  
  1083.  
  1084.    '** the following is to identify subsequent installs from a distribution install
  1085.    '** to avoid launching the electronic registration. It makes an entry for
  1086.    '** a distribution install
  1087.  
  1088.  
  1089.  
  1090.    network$ = GetSymbolValue(SYM_NETWORK$)
  1091.    automation$ = GetSymbolValue(SYM_AUTOMATIONINST$)
  1092.    distribution$ = GetIniKeyString(gInstallIniFile$, "TOOLKIT", "DISTRIBUTION")
  1093.    IF network$ <> gNODE$    AND _
  1094.       distribution$ = ""    AND _
  1095.       automation$ <> gTRUE$ THEN
  1096.        executable$ = GetIniKeyString(gInstallIniFile$, "TOOLKIT","LAUNCHEXE")    
  1097.        IF executable$ <> "" THEN
  1098.      '*** thecheck below is because MakePath only works with
  1099.      '** a file name of 12 characters .e.g. foo.exe  and not reg\foo.exe
  1100.      IF RIGHT$(prodbaseDir$, 1) <> "\" THEN
  1101.         prodbaseDir$ = prodbaseDir$ + "\"
  1102.      END IF
  1103.      executable$ = prodbaseDir$ + executable$
  1104.      IF DoesFileExist(executable$,femExists) <> 0 AND _
  1105.         gProdsupport% = 1 THEN
  1106.         ExecError% = WinExec(executable$,SW_SHOWNORMAL)
  1107.             IF ExecError% < 32 THEN
  1108.            ErrorMsg SID_ERR_EXECPIPELINE, executable$
  1109.             END IF
  1110.          END IF
  1111.  
  1112.        END IF
  1113.    END IF
  1114.  
  1115.     '** Record the language of install
  1116.      CreateIniKeyValue gInstallIniFile$, "TOOLKIT", "LANGUAGE",_
  1117.          GetSymbolValue(SYM_INSTALL_LANGUAGE$), cmoOverwrite
  1118.      
  1119.    IF network$ = gDISTRIBUTION$ THEN
  1120.      CreateIniKeyValue gInstallIniFile$, "TOOLKIT", "DISTRIBUTION", "YES", cmoVital    
  1121.    END IF
  1122.         
  1123. END FUNCTION
  1124.  
  1125.  
  1126. '********************************
  1127. '********************************
  1128. '** Product Specific Functions **
  1129. '********************************
  1130. '********************************
  1131.  
  1132. '*************************************************************************
  1133. '** FUNCTION GetINSTPathfromLotusIni() AS STRING
  1134. '**
  1135. '** Purpose: Gets the product dir path from Lotus.ini file, and searches for
  1136. '**          inst.exe in the dir. 
  1137. '**            
  1138. '** Author:    JYOTI KEDIA
  1139. '** Arguments: None
  1140. '** Returns:   if inst.exe does not exist in dir specified in lotus.ini, it
  1141. '**            returns "", otherwise returns the full path to the product.
  1142. '*************************************************************************
  1143.  
  1144. FUNCTION GetINSTPathfromLotusIni() AS STRING
  1145. DIM DestDir$, lotusinipath$, defdir$, temp%, ProdDir$, fullpath$, rv%
  1146.  
  1147.    DestDir$ = GetWindowsDir()
  1148.    lotusinipath$ = DestDir$ +"lotus.ini"
  1149.  
  1150.    if DoesFileExist(lotusinipath$,femExists) then
  1151.       defdir$ = GetIniKeyString(lotusinipath$,"Lotus Applications", "inst")
  1152.       if defdir$ <> "" then
  1153.          temp% = INSTR(1,LCASE$(defdir$),"inst.exe")
  1154.          if temp% <> 0 then
  1155.             ProdDir$ = MID$(defdir$,1,(temp%-1))
  1156.             if ProdDir$ <> "" then
  1157.                fullpath$ = ProdDir$ + "inst.exe"
  1158.                if DoesFileExist(fullpath$, femExists) then
  1159.                   rv% = Lot_CleanPath(fullpath$)
  1160.                   GetINSTPathfromLotusIni = fullpath$
  1161.                   EXIT FUNCTION
  1162.                end if 
  1163.             end if 
  1164.          end if 
  1165.       end if 
  1166.    end if
  1167.  
  1168.    GetINSTPathfromLotusIni = ""
  1169.  
  1170. END FUNCTION
  1171.  
  1172. '*************************************************************************
  1173. '** PUBLIC FUNCTION InitLanguageINST (prodno%, network$, direction$)
  1174. '** Purpose: Placeholder, since all products must provide a function of this
  1175. '** name, does nothing.
  1176. '*************************************************************************
  1177. PUBLIC FUNCTION InitLanguageINST (prodno%, network$, direction$) AS STRING
  1178.    InitLanguages "", "", prodno%    
  1179.     InitLanguageINST  = ""
  1180. END FUNCTION
  1181.  
  1182. CONST UserPathRegValue$ = "User Path"
  1183.  
  1184. SUB SetUserHomeDirectory() 
  1185. '*************************************************************************
  1186. '** Purpose: Sets the value of the special destination directory symbol
  1187. '**    SYM_LOTUSUSERDIR$ for user specific files on node
  1188. '** For standard or server, set value to SYM_COMPONENTSDIR$           
  1189. '**            
  1190. '** Author:    JMDonohue
  1191. '*************************************************************************
  1192. DIM Key$, rc&, user$, drive$, s$, Size&, Path$, i%, network$ 
  1193.  
  1194.    network$ = GetSymbolValue(SYM_NETWORK$)
  1195.     Key$ =  gREGLOTUSCOMP
  1196.    SELECT CASE network$
  1197.     CASE gSTANDARD$
  1198.         SetSymbolValue SYM_LOTUSUSERDIR$, GetSymbolValue(SYM_COMPONENTSDIR$)
  1199.     CASE gSERVER$
  1200.         SetSymbolValue SYM_LOTUSUSERDIR$, GetSymbolValue(SYM_COMPONENTSDIR$)
  1201.     CASE gNODE$
  1202.         ' Use the local path for the user if it exists
  1203.         Path$ = ""
  1204.         IF     Lot_DoesRegKeyExistEx(HKEY_CURRENT_USER, Key$) THEN
  1205.             s$=CreateBuffer(256)
  1206.             Size& = 256
  1207.             IF Lot_GetRegKeyValueEx(HKEY_CURRENT_USER, Key$, UserPathRegValue$, 0, _
  1208.                     s$, Size&) = ERROR_SUCCESS THEN Path$=NullTrim(s$) 
  1209.         END IF
  1210.         IF Path$ = "" THEN
  1211.             s$ = GetSymbolValue(SYM_BASEDIR$)
  1212.             Path$ = MakePath(s$,gCOMPONENTS$) + "\"
  1213.         END IF
  1214.         SetSymbolValue SYM_LOTUSUSERDIR$, Path$
  1215.     CASE gDISTRIBUTION$
  1216.         SetSymbolValue SYM_LOTUSUSERDIR$, ""
  1217.    END SELECT
  1218.  
  1219. END SUB
  1220.  
  1221. %rem
  1222.  
  1223. ****NOTE:
  1224. ****This is not used in CIT 2.1
  1225. ****Kept around for sentimental reasons
  1226.  
  1227. CONST UserDirRegKey$ = _
  1228. "SOFTWARE\Microsoft\Windows\CurrentVersion\ProfileList"
  1229. CONST UserDirRegValue$ = "ProfileImagePath"
  1230.  
  1231. SUB SetUserHomeDirectory() 
  1232. '*************************************************************************
  1233. '** Purpose: Retrieves the value of the system supplied user home directory
  1234. '**    and sets the value of the special destination directory symbol
  1235. '**    SYM_LOTUSUSERDIR$
  1236. '**            
  1237. '** Author:    JMDonohue
  1238. '*************************************************************************
  1239. DIM Key$, rc&, user$, drive$, s$, Size&, Path$, i%
  1240.  
  1241. IF WhatPlatform() = PLATFORM_WIN95 THEN
  1242.     Key$ =  UserDirRegKey$
  1243.     IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, Key$) THEN
  1244.         user$=CreateBuffer(128)
  1245.         Size&=128
  1246.         i%=GetUserName(user$, Size&)
  1247.         user$=NullTrim(user$)
  1248.         Key$ = UserDirRegKey$ + "\" + user$
  1249.         IF Lot_DoesRegKeyExistEx(HKEY_LOCAL_MACHINE, Key$) = FALSE THEN 
  1250.             ErrorMsg 0, "Registry key "+Key$+" Does not Exist"
  1251.             ERROR STFQUIT
  1252.         END IF
  1253.         s$=CreateBuffer(256)
  1254.         Size& = 256
  1255.         rc& = Lot_GetRegKeyValueEx(HKEY_LOCAL_MACHINE, Key$, UserDirRegValue$, 0, _
  1256.                 s$, Size&) 
  1257.         Path$=NullTrim(s$) + "\Lotus\"
  1258.     ELSE
  1259.         'For a single user, put it in desktop for want of a better place
  1260.         Path = GetWindowsDir() + "Desktop\Lotus\"
  1261.     END IF
  1262.  
  1263. ELSEIF WhatPlatform() = PLATFORM_WINNT THEN
  1264.     drive$ = GetEnvVariableValue ("HOMEDRIVE")
  1265.     s$ = GetEnvVariableValue ("HOMEPATH")
  1266.     Path$ = drive$ + s$ + "\Lotus\"
  1267. ELSE
  1268.     ErrorMsg 0, "Unsupported platform"
  1269.     ERROR STFQUIT
  1270. END IF
  1271.  
  1272. SetSymbolValue SYM_LOTUSUSERDIR$, Path$
  1273.  
  1274. END SUB
  1275.  
  1276. %endrem
  1277.